perm filename SCANW.F4[MUS,LCS]1 blob
sn#035050 filedate 1974-01-08 generic text, type T, neo UTF8
00100 C ***** SCANNER *************************
00200 SUBROUTINE SCANR
00250 DIMENSION IP(30)
00300 COMMON P(30),J,L,CNT(27),BT,PL(48),MK,DF,DUR(27)
00400 1 ,IQ(27),ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,ISUB,NFLG,IXX,ISEMI,IQT
00500 1 ,INP(72),VX(70),ISCA(12),IDAT(11),IAMP,K,KN,M,ML,CODE,IBLA
00600 EQUIVALENCE(IF,ISCA(6)),(ISS,ISCA(9)),(IE,ISCA(5)),(IDOT,IDAT(11))
00700 1 ,(IEN,ISCA(4)),(IP,P)
00800 NNUM=-1
00900 ISKP=0
01000 JJ=0
01100 XMINUS=1.
01200 999 IDECI=-1
01300 M=0
01400 2799 N=INP(ML)
01500 IF(N.NE.IQT)GO TO 899
01600 JA=-1
01700 ML=ML+1
01800 ISUB=8
01900 JJ=JJ+1
02000 VX(JJ)=ML
02100 C POINTS TO FIRST LIT. CHAR.
02200 DO 1177 K=ML,72
02300 IF(INP(K).NE.IQT)GO TO 1177
02400 ML=K+1
02500 2177 N=INP(ML)
02600 GO TO 899
02700 1177 CONTINUE
02800 CC GO TO 99
02900 C SKIPS 'LIT' ITEMS IN RAN. SELECTION
03000 899 ML=ML+1
03100 IF(N.EQ.ISEMI)GO TO 751
03200 IF(N.NE.IBLA.AND.N.NE.',')GO TO 510
03300 4702 IF(ISKP)202,2799,2799
03400
03500 510 IF(JA)GO TO 70
03600 C********** MAY 22,71
03700 DO 77 K=1,12
03800 IF(N.NE.ISCA(K))GO TO 77
03900 IF(K.NE.2.AND.K.NE.4)GO TO 511
04000 NSWCH=K-4
04100 GO TO 2177
04200 C TO SWITCH ALWAYS USE OCT.# /PBF4/ /NE5/ P=PROXIMITY, N=NORMAL
04300 C ************ MAY 22,71
04400 511 NNUM=K
04500 JJ=JJ+1
04600 NFLG=-1
04700 N=INP(ML)
04800 IF(N.NE.IF)GO TO 410
04900 NNUM=NNUM-1
05000 GO TO 610
05100 410 IF(N.NE.ISS)GO TO 3410
05200 NNUM=NNUM+1
05300 610 ML=ML+1
05400 CC3410 N=INP(ML)
05500 CC IF(N.NE.IEN)GO TO 371
05600 N=INP(ML)
05700 3410 IF(N.NE.IEN.AND.N.NE.'I')GO TO 371
05800 C 'END' OR 'FINE' WILL END INST.
05900 C******** MAY 20,71
06000 3411 VX(JJ)=10000.
06100 IF(DUR(LK))DUR(LK)=1000.
06200 IAMP=-1
06300 RETURN
06400 371 IF(N.EQ.ISEMI.OR.N.EQ.IBLA)GO TO 5410
06500 DO 177 KN=2,8
06600 CC********* MAY 20,71 371 DO 177 KN=2,8
06700 IF(N.NE.IDAT(KN))GO TO 177
06800 JSCA=KN-2
06900 ML=ML+1
07000 GO TO 2410
07100 177 CONTINUE
07200 GO TO 6410
07300 5410 KN=-1
07400 6410 IF(NSWCH.EQ.0)GO TO 2410
07500 IF(KN)GO TO 7410
07600 IF(N.EQ.'+')NOLD=NOLD+6
07700 IF(N.EQ.'-')NOLD=NOLD-6
07800 C /B/B-/ JUMPS DOWN OCT., /B/B+/ UP OCT.
07900 7410 IF(NOLD-NNUM.GT.5.AND.JSCA.LT.7)JSCA=JSCA+1
08000 IF(NOLD-NNUM.LT.-5.AND.JSCA.GT.0)JSCA=JSCA-1
08100 C WILL JUMP TO NEAREST NOTE *********** MAY 22,71
08200 2410 VX(JJ)=JSCA*12+NNUM
08300 NOLD=NNUM
08400 C ********** MAY 22,71
08500 4410 NNUM=-2
08600 CC IF(M.EQ.IEN)NSWCH=0
08700 CC IF(M.EQ.IPP)NSWCH=-1
08800 IF(INP(ML).EQ.ISEMI)RETURN
08900 C ABOVE FINDS SCALE NOTES; IF NSWCH=0 OCT. NUM WILL STICK UNTIL RESET
09000 GO TO 310
09100 C *********MAY 22,71
09200 77 CONTINUE
09300 70 IF(N.NE.'-')GO TO 71
09400 XMINUS=-1.
09500 GO TO 2799
09600 210 JJ=JJ+1
09700 IF(JJ.EQ.1)GO TO 3310
09800 C****** MAY 19,71
09900 XMINUS=1.
10000 VX(JJ)=0
10100 CC IF(JJ.EQ.1)VX(JJ)=-99.
10200 C 'X N1,N2' MAY REPLACE 'REP N1,N2'. N2=0 BECOMES N2=2
10300 GO TO 310
10400 71 IF(N.EQ.IXX)GO TO 210
10500 IF(N.EQ.'R')GO TO 73
10600
10700 1410 DO 78 K=1,11
10800 IF(N.NE.IDAT(K))GO TO 78
10900 ISKP=-1
11000 IF(N.NE.IDOT)GO TO 79
11100 IDECI=M
11200 GO TO 75
11300 79 M=M+1
11400 IP(M)=K-1
11500 GO TO 75
11600 78 CONTINUE
11700 IF(N.NE.IE.AND.N.NE.IF)GO TO 781
11800 C 'END' OR 'FINE' WILL END INST.
11900 JJ=1
12000 GO TO 3411
12100 781 IF(N.EQ.'/')N=ISEMI
12200 C FOR MOTIVIC TRANFORMATIONS
12300
12400 CC75 IF(ML.GT.72)GO TO 99
12500 75 IF(N.NE.ISEMI.AND.INP(ML).NE.1)GO TO 2799
12600 751 IF(ISKP.EQ.0)RETURN
12700 202 IF(IDECI.NE.-1)GO TO 302
12800 IDECI=0
12900 GO TO 402
13000 302 IDECI=M-IDECI
13100 402 KN=0
13200 IEXP=M-1
13300 IF(M.LT.1)M=1
13400 DO 171 K=1,M
13500 KV=10**IEXP
13600 IF(IEXP.EQ.0)KV=1
13700 KN=KN+IP(K)*KV
13800 171 IEXP=IEXP-1
13900 A=10**IDECI
14000 IF(IDECI.EQ.0)A=1.
14100 JJ=JJ+1
14200 VX(JJ)=KN/A*XMINUS
14300 IF(ISUB.EQ.1)RETURN
14400 IF(CODE.NE.-22.)XMINUS=1.
14500 C ONLY ONE - NEEDED FOR RHY.COMPOSITE
14600 1310 IF(INP(ML).NE.1)GO TO 310
14700 VX(JJ+1)=VX(JJ)*2.
14800 JJ=JJ+1
14900 ML=ML+1
15000 GO TO 1310
15100 206 ML=ML+2
15200 3310 VX(1)=-99.
15300 C******** MAY 19,71
15400 310 ISKP=0
15500 IF(N.NE.ISEMI)GO TO 999
15600
15700 RETURN
15800 73 JJ=JJ+1
15900 IF(INP(ML).EQ.IE)GO TO 206
16000 C NEXT IS FOR A REST ('R')
16100 VX(JJ)=85.
16200 GO TO 4410
16300 CC206 ML=ML+2
16400 CC VX(JJ)=-99.
16500 CC GO TO 310
16600 END
16700
16800 SUBROUTINE BGSORT(BW)
16900 C THIS SORTS BG TIMES SO NONE ARE DUPLICATED IN BNW ARRAY.
17000 C ALLOWS 100 BG TIMES.
17100 COMMON /Q/ BNW(100),NWZ
17200 DO 5308 K=1,NWZ
17300 X=BNW(K)-.0001
17400 Y=X+.0002
17500 C ROUND-OFF NONSENSE
17600 5308 IF(BW.GT.X.AND.BW.LT.Y)RETURN
17700 NWZ=NWZ+1
17800 BNW(NWZ)=BW
17900 RETURN
18000 END
18100
18200 SUBROUTINE FMT(JFM,INP,MLX)
18300 DIMENSION JFM(3),INP(1)
18400 DO 1 MLX=2,72
18450 J=INP(MLX)
18500 1 IF(J.EQ.' '.OR.J.EQ.','.OR.J.EQ.';')GO TO 2
18510 C SPACE=COMMA=SPACE, ALSO STOPS ON ";"
18600 2 MLX=MLX+1
18700 IF(MLX.GT.7)MLX=7
18800 JFM(2)='0'+(MLX-2)*536870912
18900 C FINDS NUMBER FOR 'A' FORMAT
19000 RETURN
19100 END
20000
20100 SUBROUTINE RANR(VX,K)
20200 C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
20300 DIMENSION VX(1)
20400 X=VX(K)
20500 Y=VX(K+1)
20600 IF(X.GT.Y)VX(K)=X+.999
20700 IF(Y.GE.X)VX(K+1)=Y+.999
20800 RETURN
20900 END